package com.trs.zk.common.mybatis.annotation;

import java.lang.annotation.*;

/**
 * 指定实体的物理表的关联表属性
 * @author msy
 * @date 2018/8/11 17:51
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
public @interface Table {
    /**
     * 物理表名
     */
    String name() default "";

    /**
     * 当前表别名
     */
    String alias() default "a";
    /**
     * 表主键
     */
    String pK() default  "id";

    /**
     * 表列定义
     */
    Column[] columns();

    /**
     * 查询，关联表
     */
    JoinTable[] joinTable() default {};

    /**
     * 指定排序
     */
    String orderBy() default "";

    /**
     * 表说明
     */
    String comment() default "";

    /**
     * 扩展ColumnSQL，在这里指定sqlMap的key。<br>
     * 例如：\@Table(extColumnKeys="dataScopeColumn");<br>
     * Service里设置：sqlMap.put("extColumn", "column_name AS \"columnName\"");<br>
     * 在执行查询的时候，该语句放到自动会加到Select最后并执行。<br>
     * <b>注意：</b>如果设置，必须后台代码中设置，否则可能造成sql注入漏洞<br>
     */
    String extColumnKeys() default "";

    /**
     * 扩展FromSQL，在这里指定sqlMap的key。<br>
     * 例如：\@Table(extFromKeys="dataScopeFrom");<br>
     * Service里设置：sqlMap.put("dataScopeFrom", "JOIN table_name t on t.pk=a.pk");<br>
     * 在执行查询的时候，该语句放到自动会加到From最后并执行。<br>
     * <b>注意：</b>如果设置，必须后台代码中设置，否则可能造成sql注入漏洞<br>
     */
    String extFromKeys() default "";

    /**
     * 扩展WhereSQL，在这里指定sqlMap的key。<br>
     * 例如：\@Table(extWhereKeys="dataScopeWhere");<br>
     * Service里设置：sqlMap.put("dataScopeWhere", "AND column_name='value'");<br>
     * 在执行查询的时候，该语句放到自动会加到Where最后并执行。<br>
     * <b>注意：</b>如果设置，必须后台代码中设置，否则可能造成sql注入漏洞<br>
     */
    String extWhereKeys() default "";
}
